package utils

import (
	"sync/atomic"
	"time"
)

var (
	defaultSubscribeCenterFlag int32            = 0
	defaultSubscribeCenter     *SubscribeCenter = nil
)

func CheckDefaultSubscribeCenter() bool {
	if defaultSubscribeCenter == nil {
		if atomic.CompareAndSwapInt32(&defaultSubscribeCenterFlag, 0, 1) {
			defaultSubscribeCenter = NewSubscribeCenter()
		} else {
			time.Sleep(time.Millisecond * 100)
		}
	}
	return defaultSubscribeCenter != nil
}

func DefaultSubscribeCenter() *SubscribeCenter {
	if !CheckDefaultSubscribeCenter() {
		panic("DefaultSubscribeCenter创建失败!!!")
	}
	return defaultSubscribeCenter
}

func DefaultDispatchSimple(channelid string, data interface{}) int {
	return DefaultSubscribeCenter().DispatchData(channelid, nil, data, nil)
}

func DefaultDispatch(channelid string, sender, data, tag interface{}) int {
	return DefaultSubscribeCenter().DispatchData(channelid, sender, data, tag)
}

func DefaultSubscribeChannel(channelid string, id interface{}, cb SubscribeCallback) {
	DefaultSubscribeCenter().SubscribeChannel(channelid, id, cb)
}

func DefaultUnsubscribeChannel(channelid string, id interface{}) bool {
	return DefaultSubscribeCenter().UnsubscribeChannel(channelid, id)
}
